#ifndef __CONFIGURATION_H__
#define __CONFIGURATION_H__

#include <string>
#include <pthread.h>
#include <stdlib.h>
#include <unordered_map>
#include <unordered_set>

using namespace std;

// 配置文件读取，单例模式，自动释放
class Configuration
{
public:
    static Configuration* getInstance();
    
    // 配置文件读取
    void readConfigFile(const string& configFilePath);

    // 获取配置文件内容
    unordered_map<string, string>& getConfigMap();

    // 获取key对应的value
    string getMapValue(const string& key);

    // 判断是否是停用词
    bool isStopWord(const string& word);

private:
    Configuration();
    ~Configuration();       

    static void init_r();

    // 生成停用词集合
    void createStopWordList();
    
    // 释放内存资源
    static void destroy();

private:
    unordered_map<string,string> _configMap;   // 存储配置文件内容
    static Configuration* _pInstance;
    static pthread_once_t _once;
    unordered_set<string> _stopWordList;  // 停用词表
};

#endif

